package cn.tedu.list;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.ListIterator;

/**本类用于ArrayList相关测试*/
public class TestArrayList {
    public static void main(String[] args) {
        /**底层会自动帮我们创建数组来存放对象,并且数组的初始容量是10*/
        ArrayList<Integer> list=new ArrayList();
        list.add(100);
        list.add(200);
        list.add(300);
        list.add(400);
        list.add(400);
        list.add(300);
        System.out.println(list);
//        list.clear();
//        System.out.println(list);
        System.out.println(list.contains("100"));//false,是否包含指定元素"100",此为String类型
        System.out.println(list.isEmpty());//false,判断集合是否为空
        System.out.println(list.get(0));//100
        System.out.println(list.indexOf(400));//3,判断元素第一次出现的位置
        System.out.println(list.lastIndexOf(400));//4,判断元素最后出现的位置
        System.out.println(list.remove(1));//200,移除指定位置处的元素
        //System.out.println(list.remove(300));
        /**上面代码会报错:数组下标越界:index:300 size:5
         * 主要是因为List中有两个重载的remove(),如果传入的是300
         * 会认为是int类型的index索引,所以如果想指定元素删除数据
         * 需要把int类型的300手动装箱成Integer类型*/
        System.out.println(list.remove(Integer.valueOf(300)));//
        System.out.println(list.set(2,777));//修改指定索引处的元素的值为777
        System.out.println(list);
        System.out.println(list.size());
        //4.进行集合的迭代
        //①,for循环
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
        //②,高效for循环
        System.out.println("**********");
        for (Integer e:list){
            System.out.println(e);
        }
        System.out.println("**********");
        //③,Iterator
        Iterator<Integer> it1 = list.iterator();
        while (it1.hasNext()){
            System.out.println(it1.next());
        }
        System.out.println("**********");
        //④,listIterator,list独有的迭代器listIterator
        ListIterator<Integer> it2 = list.listIterator();
        while (it2.hasNext()){
            System.out.println(it2.next());
        }
    }
}
